home *** CD-ROM | disk | FTP | other *** search
/ Beginning Mac Programming / Beginning Mac Programming.bin / Open Me for REALbasic 3 / REALbasic 3.2 / Example Projects / Techniques / String Functions / string functions source < prev    next >
Text File  |  1998-02-24  |  22KB  |  901 lines

  1. Window1.parseButton.Action:
  2. Sub Action()
  3.   
  4.   output.text = csReplaceAll (input.text, "blUrk", "I SAID BLURK")
  5. End Sub
  6.  
  7. StringFunctions.isSpace:
  8. Function isSpace(query as string) As Boolean
  9.   
  10.   if query = "" then
  11.     return false
  12.   end if
  13.   
  14.   if (left (query, 1)) = (chr (13)) or (left (query, 1)) = (chr (32)) or (left (query, 1)) = (chr (9)) then
  15.     return true
  16.   else 
  17.     return false
  18.   end if
  19. End Function
  20.  
  21. StringFunctions.nibbleRight:
  22. Function nibbleRight(entry as string) As String
  23.   dim tempString as string
  24.   dim tempInt as integer
  25.   tempString = entry
  26.   tempInt = len (entry)
  27.   
  28.   do
  29.     if tempString = "" then
  30.       return tempString
  31.     end if
  32.     
  33.     if isSpace (mid (tempString, tempInt)) then
  34.       tempInt = tempInt - 1
  35.       tempString = left (tempString, tempInt)
  36.     else
  37.       return tempString
  38.     end if
  39.     
  40.   loop
  41. End Function
  42.  
  43. StringFunctions.isChar:
  44. Function isChar(query as string) As Boolean
  45.   
  46.   if query = "" then
  47.     return false
  48.   end if
  49.   
  50.   if ( ( ((asc (query)) > 47) and ((asc (query)) < 58)  ) or ( ((asc (query)) > 64) and ((asc (query)) < 91)  ) or ( ((asc (query)) > 96) and ((asc (query)) < 123)  ) ) then
  51.     return true
  52.   else
  53.     return false
  54.   end if
  55. End Function
  56.  
  57. StringFunctions.isPunct:
  58. Function isPunct(query as string) As boolean
  59.   dim tempInt as integer
  60.   
  61.   if query = "" then
  62.     return false
  63.   end if
  64.   
  65.   tempInt = asc (query)
  66.   
  67.   if tempInt = 33 or tempInt = 34 or tempInt = 39 or tempInt = 44 or tempInt = 46 or tempInt = 58 or tempInt = 59 or tempInt = 63 then
  68.     return true
  69.   else
  70.     return false
  71.   end if
  72. End Function
  73.  
  74. StringFunctions.isLetter:
  75. Function isLetter(query as string) As boolean
  76.   dim tempInt as integer
  77.   
  78.   if query = "" then
  79.     return false
  80.   end if
  81.   
  82.   tempInt = asc (query)
  83.   
  84.   if ( ( (tempInt > 64) and (tempInt < 91)  ) or ( (tempInt > 96) and (tempInt < 123)  ) ) then
  85.     return true
  86.   else
  87.     return false
  88.   end if
  89. End Function
  90.  
  91. StringFunctions.nibbleLeft:
  92. Function nibbleLeft(entry as string) As String
  93.   dim tempString as string
  94.   tempString = entry
  95.   
  96.   do
  97.     if tempString = "" then
  98.       return tempString
  99.     end if
  100.     
  101.     if isSpace (left (tempString, 1)) then
  102.       tempString = mid (tempString, 2)
  103.     else
  104.       return tempString
  105.     end if
  106.     
  107.   loop
  108. End Function
  109.  
  110. StringFunctions.nibble:
  111. Function nibble(entry as string) As String
  112.   dim tempString as string
  113.   tempString = nibbleRight (entry)
  114.   tempString = nibbleLeft (tempString)
  115.   return tempString
  116.   
  117. End Function
  118.  
  119. StringFunctions.chewRight:
  120. Function chewRight(entry as string) As String
  121.   dim tempString as string
  122.   dim tempInt as integer
  123.   tempString = entry
  124.   tempInt = len (entry)
  125.   
  126.   do
  127.     if tempString = "" then
  128.       return tempString
  129.     end if
  130.     
  131.     if isSpace (mid (tempString, tempInt)) or isPunct (mid (tempString, tempInt)) then
  132.       tempInt = tempInt - 1
  133.       tempString = left (tempString, tempInt)
  134.     else
  135.       return tempString
  136.     end if
  137.     
  138.   loop
  139. End Function
  140.  
  141. StringFunctions.chewLeft:
  142. Function chewLeft(entry as string) As String
  143.   dim tempString as string
  144.   tempString = entry
  145.   
  146.   do
  147.     if tempString = "" then
  148.       return tempString
  149.     end if
  150.     
  151.     if isSpace (left (tempString, 1)) or isPunct (left (tempString, 1)) then
  152.       tempString = mid (tempString, 2)
  153.     else
  154.       return tempString
  155.     end if
  156.   loop
  157. End Function
  158.  
  159. StringFunctions.chew:
  160. Function chew(entry as string) As String
  161.   dim tempString as string
  162.   
  163.   tempString = chewLeft (entry)
  164.   tempString = chewRight (tempString)
  165.   
  166.   return tempString
  167.   
  168. End Function
  169.  
  170. StringFunctions.chompRight:
  171. Function chompRight(entry as string) As String
  172.   dim tempString as string
  173.   dim tempInt as integer
  174.   tempString = entry
  175.   tempInt = len (entry)
  176.   
  177.   do
  178.     if tempString = "" then
  179.       return tempString
  180.     end if
  181.     
  182.     if isChar (mid (tempString, tempInt)) then
  183.       return tempString
  184.     else
  185.       tempInt = tempInt - 1
  186.       tempString = left (tempString, tempInt)
  187.     end if
  188.     
  189.   loop
  190. End Function
  191.  
  192. StringFunctions.chompLeft:
  193. Function chompLeft(entry as string) As String
  194.   dim tempString as string
  195.   tempString = entry
  196.   
  197.   do
  198.     if tempString = "" then
  199.       return tempString
  200.     end if
  201.     
  202.     if isChar (left (tempString, 1)) then
  203.       return tempString
  204.     else
  205.       tempString = mid (tempString, 2)
  206.     end if
  207.   loop
  208. End Function
  209.  
  210. StringFunctions.chomp:
  211. Function chomp(entry as string) As String
  212.   dim tempString as string
  213.   
  214.   tempString = chompLeft (entry)
  215.   tempString = chompRight (tempString)
  216.   
  217.   return tempString
  218. End Function
  219.  
  220. StringFunctions.getBracketedText:
  221. Function getBracketedText(leftBracket as string, rightBracket as string, instance as integer, entry as string) As String
  222.   dim loopCounter as integer
  223.   dim tempInt1 as integer
  224.   dim tempInt2 as integer
  225.   dim tempString1 as string
  226.   dim holdingString as string
  227.   
  228.   if leftBracket = "" or rightBracket = "" or instance < 1 or entry = "" then
  229.     return ""
  230.   end if
  231.   
  232.   tempString1 = entry
  233.   loopCounter = 0
  234.   
  235.   if leftBracket = rightBracket then
  236.     do
  237.       tempInt1 = inStr (tempString1, rightBracket)
  238.       tempInt2 = inStr (tempInt1 + 1, tempString1, rightBracket)
  239.       if tempInt2 = 0 then
  240.         return ""  //  get out of here if you can't find any instances of the bracket
  241.       end if
  242.       if tempInt2 = (tempInt1 +1) then // they're right on top of each other, get rid of the first
  243.         loopCounter = loopCounter -1
  244.         tempString1 = mid (tempString1, tempInt2)
  245.       else  // there's something there, but is it just a space?
  246.         holdingString = mid (tempString1, (tempInt1+1), (tempInt2 - tempInt1 - 1))
  247.         if hasNonSpace (holdingString) then  // we're okay
  248.           tempString1 = mid (tempString1, tempInt2 )
  249.         else
  250.           tempString1 = mid (tempString1, tempInt2)
  251.           loopCounter = loopCounter - 1
  252.         end if
  253.         
  254.       end if
  255.       loopCounter = loopCounter + 1
  256.     loop until loopCounter = instance
  257.     return holdingString
  258.   else  //  different brackets!
  259.     do
  260.       tempInt1 = inStr (tempString1, rightBracket)
  261.       if tempInt1 = 0 then
  262.         return ""  //  get out of here if you can't find any instances of the bracket
  263.       end if
  264.       if tempInt1 < 2 then  // ignore if it's the first thing there
  265.         tempString1 = mid (tempString1, (tempInt1 + 1))
  266.       end if
  267.       holdingString = left (tempString1, (tempInt1-1))
  268.       if inStr (holdingString, leftBracket) = 0 then  // see if leftBracket's there
  269.         //  if not, chop down the string and don't increment the loop
  270.         tempString1 = mid (tempString1, (tempInt1 + 1))
  271.         loopCounter = loopCounter - 1
  272.       else
  273.         holdingString = chompToFromLeft (holdingString, leftBracket)
  274.         if hasNonSpace (holdingString) then
  275.           tempString1 = mid (tempString1, (tempInt1 + 1))
  276.         else  // the remaining bit is all spaces, so ignore
  277.           tempString1 = mid (tempString1, (tempInt1 + 1))
  278.           loopCounter = loopCounter - 1
  279.         end if
  280.       end if
  281.       loopCounter = loopCounter + 1
  282.       
  283.     loop until loopCounter = instance
  284.     return holdingString
  285.   end if
  286.   
  287. End Function
  288.  
  289. StringFunctions.hasNonSpace:
  290. Function hasNonSpace(entry as string) As Boolean
  291.   dim loopCounter as integer
  292.   
  293.   if entry = "" then
  294.     return false
  295.   end if
  296.   
  297.   for loopCounter = 1 to len (entry)
  298.     if isSpace (mid (entry, loopCounter, 1)) then
  299.       // do nothing
  300.     else
  301.       return true
  302.     end if
  303.   next
  304.   
  305.   return false
  306. End Function
  307.  
  308. StringFunctions.chompToFromLeft:
  309. Function chompToFromLeft(entry as string, target as string) As String
  310.   dim tempInt as integer
  311.   dim tempString as string
  312.   
  313.   if entry = "" or target = ""then
  314.     return ""
  315.   end if
  316.   
  317.   tempString = entry
  318.   do
  319.     tempInt = inStr (tempString, target)
  320.     if tempInt = 0 then
  321.       exit
  322.     else
  323.       tempString = mid (tempString, (tempInt + len (target)))
  324.     end if
  325.   loop 
  326.   
  327.   return tempString
  328. End Function
  329.  
  330. StringFunctions.chompToFromRight:
  331. Function chompToFromRight(entry as string, target as string) As String
  332.   dim tempString as string
  333.   dim tempInt as integer
  334.   
  335.   if entry = "" or target = "" then
  336.     return ""
  337.   end if
  338.   
  339.   tempInt = inStr (entry, target)
  340.   
  341.   if tempInt = 0 then
  342.     return entry
  343.   else
  344.     tempString = left (entry, (tempInt - 1))
  345.     return tempString
  346.   end if
  347.   return tempString
  348. End Function
  349.  
  350. StringFunctions.nibbleToFromLeft:
  351. Function nibbleToFromLeft(entry as string, target as string) As string
  352.   dim tempString as string
  353.   dim tempInt as integer
  354.   
  355.   if entry = "" or target = "" then
  356.     return ""
  357.   end if
  358.   
  359.   tempInt = inStr (entry, target)
  360.   if tempInt = 0 then
  361.     return entry
  362.   else
  363.     tempString = mid (entry, (tempInt + len (target)))
  364.     return tempString
  365.   end if
  366.   
  367. End Function
  368.  
  369. StringFunctions.nibbleToFromRight:
  370. Function nibbleToFromRight(entry as string, target as string) As string
  371.   dim holdingInt as integer
  372.   dim tempInt as integer
  373.   dim tempString as string
  374.   
  375.   if entry = "" or target = "" then
  376.     return ""
  377.   end if
  378.   
  379.   do
  380.     tempInt = inStr ((holdingInt + 1), entry, target)
  381.     if tempInt = 0 then
  382.       exit
  383.     else
  384.       holdingInt = tempInt
  385.     end if
  386.   loop  
  387.   tempString = left (entry, (holdingInt - 1))
  388.   return tempString
  389.   
  390.   
  391. End Function
  392.  
  393. StringFunctions.chewToFromLeft:
  394. Function chewToFromLeft(entry as string, target as string, occurrance as integer) As string
  395.   dim loopCounter as integer
  396.   dim tempInt1 as integer
  397.   dim tempString1 as string
  398.   
  399.   if entry = "" or target = "" or occurrance <1 then
  400.     return ""
  401.   end if
  402.   
  403.   tempString1 = entry
  404.   
  405.   do
  406.     tempInt1 = inStr (tempString1, target)
  407.     if tempInt1 = 0 then
  408.       return entry
  409.     end if
  410.     tempString1 = mid (tempString1, (tempInt1 + len (target)))
  411.     loopCounter = loopCounter + 1
  412.   loop until loopCounter = occurrance
  413.   return tempString1
  414. End Function
  415.  
  416. StringFunctions.chewToFromRight:
  417. Function chewToFromRight(entry as string, target as string, occurrance as integer) As string
  418.   dim holdingInt (0) as integer
  419.   dim tempInt1 as integer
  420.   dim tempString as string
  421.   
  422.   if entry = "" or target = "" or occurrance <1 then
  423.     return ""
  424.   end if
  425.   
  426.   do  // find all occurrances, add them to an array.  We'll pick the right one later.
  427.     tempInt1 = inStr ((tempInt1 + 1), entry, target)
  428.     if tempInt1 = 0 then
  429.       exit
  430.     else
  431.       holdingInt.append tempInt1
  432.     end if
  433.   loop
  434.   
  435.   if (ubound (holdingInt)) < occurrance then
  436.     return entry
  437.   else
  438.     tempInt1 = ubound (holdingInt) - occurrance + 1
  439.     tempInt1 = holdingInt (tempInt1) - 1
  440.     tempString = left (entry, tempInt1)
  441.     return tempString
  442.   end if
  443. End Function
  444.  
  445. StringFunctions.outStr:
  446. Function outStr(start as integer, base as string, search as string) As integer
  447.   dim started as integer
  448.   dim tempInt as integer
  449.   dim tempInt2 as integer
  450.   dim tempInt3 as integer
  451.   dim locations (0) as integer
  452.   
  453.   if base = "" or search = "" then
  454.     return 0
  455.   end if
  456.   started = start 
  457.   if start = 0 then
  458.     started = -1 * len (base)
  459.   end if
  460.   
  461.   // to start, just find every instance of search
  462.   do
  463.     tempInt = inStr ((tempInt + 1), base, search)
  464.     if tempInt = 0 then
  465.       exit
  466.     else
  467.       locations.append tempInt
  468.     end if
  469.   loop
  470.   
  471.   if ubound (locations) = 0 then  // nothing there
  472.     return 0
  473.   end if
  474.   
  475.   if (locations (ubound (locations)) + len (search) = (len (base) + 1))  and start = 0 then
  476.     return 1
  477.   end if
  478.   
  479.   if started < 0 then  // we return the distance from the end of the string
  480.     tempInt3 = len (base) + started + 1
  481.     tempInt = 0
  482.     do
  483.       tempInt = tempInt + 1
  484.       if tempInt > ubound (locations) then
  485.         exit
  486.       end if
  487.       
  488.       if locations (tempInt) < tempInt3 then
  489.         tempInt2 = locations(tempInt)
  490.       else
  491.         exit
  492.       end if
  493.     loop
  494.     if tempInt = 1 and tempInt2 = 0 then
  495.       return 0
  496.     end if
  497.     tempInt2 = len (base) - tempInt2 + 1
  498.     return tempInt2
  499.     
  500.   else  // we return the distance from the start of the string
  501.     tempInt = 0
  502.     do
  503.       tempInt = tempInt + 1
  504.       if tempInt > ubound (locations) then
  505.         exit
  506.       end if
  507.       if locations (tempInt) < started then
  508.         tempInt2 = locations(tempInt) 
  509.       else
  510.         exit
  511.       end if
  512.     loop
  513.     if len (base) < started then
  514.       return 0
  515.     else
  516.       return tempInt2
  517.     end if
  518.   end if
  519.   
  520. End Function
  521.  
  522. StringFunctions.getWord:
  523. Function getWord(entry as string, instance as integer) As string
  524.   dim loopCounter as integer
  525.   dim spaceSpot as integer
  526.   dim returnSpot as integer
  527.   dim tabSpot as integer
  528.   dim holdSpot as integer
  529.   dim tempString as string
  530.   dim tempString2 as string
  531.   dim holdingString as string
  532.   
  533.   tempString = entry
  534.   
  535.   do
  536.     holdSpot = 0
  537.     spaceSpot = inStr (tempString, " ")
  538.     returnSpot = inStr (tempString, chr (13))
  539.     tabSpot = inStr (tempString, chr (9))
  540.     if spaceSpot = 0 and returnSpot = 0 and tabSpot = 0 then
  541.       if loopCounter + 1 = instance then
  542.         return chew (tempString)
  543.       else
  544.         return ""
  545.       end if
  546.     end if
  547.     if spaceSpot > 1 then
  548.       holdSpot = spaceSpot
  549.     end if
  550.     
  551.     if returnSpot < holdSpot and returnSpot > 1 then
  552.       holdSpot = returnSpot
  553.     end if
  554.     
  555.     if holdSpot = 0 and returnSpot >1 then
  556.       holdSpot = returnSpot
  557.     end if
  558.     
  559.     if tabSpot < holdSpot and tabSpot > 1 then
  560.       holdSpot = tabSpot
  561.     end if
  562.     
  563.     if holdSpot = 0 and tabSpot >1 then
  564.       holdSpot = tabSpot
  565.     end if
  566.     
  567.     if holdSpot = 0 then
  568.       loopCounter = loopCounter - 1
  569.       tempString = mid (tempString, 2)
  570.     else
  571.       if holdSpot = returnSpot then  // check for hyphen!
  572.          if mid (tempString, holdSpot - 1, 1) = "-"  and chomp (left (tempString, holdSpot)) <> "" then
  573.           tempString2 = getWord (mid (tempString, holdSpot), 1)
  574.           holdingString = nibble (left (tempString, holdSpot)) + chew (tempString2)
  575.           tempString = mid (tempString, (holdSpot + len (tempString2) + 1))
  576.         else
  577.           holdingString = chomp (left (tempString, holdSpot))
  578.           tempString = mid (tempString, holdSpot)
  579.         end if
  580.       else
  581.         holdingString =  chomp (left (tempString, holdSpot))
  582.         tempString = mid (tempString, (holdSpot + 1))
  583.       end if
  584.     end if
  585.     if hasNonSpace (holdingString) then
  586.       loopCounter = loopCounter + 1
  587.     end if
  588.   loop until loopCounter = instance
  589.   
  590.   return chew (holdingString)
  591. End Function
  592.  
  593. StringFunctions.splitLeft:
  594. Function splitLeft(entry as string, delimiter as string) As string
  595.   
  596.   if inStr (entry, delimiter) = 0 then
  597.     return ""
  598.   else
  599.     return left (entry, (inStr (entry, delimiter) - 1))
  600.   end if
  601. End Function
  602.  
  603. StringFunctions.splitRight:
  604. Function splitRight(entry as string, delimiter as string) As string
  605.   if inStr (entry, delimiter) = 0 then
  606.     return ""
  607.   else
  608.     return mid (entry, (inStr (entry, delimiter) + len (delimiter)))
  609.   end if
  610. End Function
  611.  
  612. StringFunctions.csInStr:
  613. Function csInStr(start as integer, base as string, query as string) As integer
  614.   dim tempString as string
  615.   dim tempInt1 as integer
  616.   dim tempInt2 as integer
  617.   dim test as integer
  618.   
  619.   tempInt1 = start
  620.   
  621.   do
  622.     tempInt2 = inStr(tempInt1, base, query)
  623.     if tempInt2 = 0 then
  624.       return 0
  625.     else
  626.       tempString = mid (base, tempInt2, len (query))
  627.       test = strComp (query, tempString, 0)
  628.       if test = 0 then
  629.         return tempInt2
  630.       else
  631.         tempInt1 = tempInt2 + 1
  632.       end if
  633.     end if
  634.   loop
  635.   
  636. End Function
  637.  
  638. StringFunctions.csSplitLeft:
  639. Function csSplitLeft(base as string, target as string) As string
  640.   
  641.   if csInStr (1, base, target) = 0 then
  642.     return ""
  643.   else
  644.     return left (base, csInStr (1, base, target))
  645.   end if
  646.   
  647. End Function
  648.  
  649. StringFunctions.csSplitRight:
  650. Function csSplitRight(base as string, target as string) As string
  651.   
  652.   if csInStr (1, base, target) = 0 then
  653.     return ""
  654.   else
  655.     return mid (base, (csInStr (1, base, target) + len (target)))
  656.   end if
  657. End Function
  658.  
  659. StringFunctions.csReplaceAll:
  660. Function csReplaceAll(base as string, target as string, replacement as string) As string
  661.   dim tempString as string
  662.   
  663.   tempString = base
  664.   
  665.   do
  666.     if csInStr (1, tempString, target) = 0 then
  667.       return tempString
  668.     else
  669.       tempString = csSplitLeft (tempString, target) + replacement + csSplitRight (tempString, target)
  670.     end if
  671.   loop
  672.   
  673. End Function
  674.  
  675. bracketedObject.findAll:
  676. Function findAll(leftBracket as string, rightBracket as string, entry as string) As Boolean
  677.   dim tempInt1 as integer
  678.   dim tempInt2 as integer
  679.   dim counter as integer
  680.   dim tempString1 as string
  681.   dim holdingString as string
  682.   
  683.   if leftBracket = "" or rightBracket = "" or entry = "" then
  684.     redim result (0)
  685.     result (0) = ""
  686.     totalFound = 0
  687.     anyFound = false
  688.     return false
  689.   end if
  690.   
  691.   tempString1 = entry
  692.   
  693.   if leftBracket = rightBracket then
  694.     do
  695.       tempInt1 = inStr (tempString1, rightBracket)
  696.       tempInt2 = inStr (tempInt1 + 1, tempString1, rightBracket)
  697.       if tempInt2 = 0 then
  698.         exit  //  get out of here if you can't find any instances of the bracket
  699.       end if
  700.       if tempInt2 = (tempInt1 +1) then // they're right on top of each other, get rid of the first
  701.         tempString1 = mid (tempString1, tempInt2)
  702.         holdingString = ""
  703.       else  // there's something there, but is it just a space?
  704.         holdingString = mid (tempString1, (tempInt1+1), (tempInt2 - tempInt1 - 1))
  705.         if hasNonSpace (holdingString) then  // we're okay
  706.           tempString1 = mid (tempString1, tempInt2 )
  707.         else
  708.           tempString1 = mid (tempString1, tempInt2)
  709.           holdingString = ""
  710.         end if
  711.       end if
  712.       if holdingString <> "" then
  713.         counter = counter + 1
  714.         if counter = 1 then
  715.           result (0) = holdingString
  716.         else
  717.           result.append holdingString
  718.         end if
  719.       end if
  720.     loop
  721.     
  722.   else  //  different brackets!
  723.     do
  724.       tempInt1 = inStr (tempString1, rightBracket)
  725.       if tempInt1 = 0 then
  726.         exit
  727.       end if
  728.       if tempInt1 < 2 then  // ignore if it's the first thing there
  729.         tempString1 = mid (tempString1, (tempInt1 + 1))
  730.       end if
  731.       holdingString = left (tempString1, (tempInt1-1))
  732.       if inStr (holdingString, leftBracket) = 0 then  // see if leftBracket's there
  733.         //  if not, chop down the string and don't increment the loop
  734.         tempString1 = mid (tempString1, (tempInt1 + 1))
  735.       else
  736.         holdingString = chompToFromLeft (holdingString, leftBracket)
  737.         if hasNonSpace (holdingString) then
  738.           tempString1 = mid (tempString1, (tempInt1 + 1))
  739.         else  // the remaining bit is all spaces, so ignore
  740.           tempString1 = mid (tempString1, (tempInt1 + 1))
  741.           holdingString = ""
  742.         end if
  743.       end if
  744.       if holdingString <> "" then
  745.         counter = counter + 1
  746.         if counter = 1 then
  747.           result (0) = holdingString
  748.         else
  749.           result.append holdingString
  750.         end if
  751.       end if
  752.     loop 
  753.   end if
  754.   
  755.   if result (0) = "" then
  756.     anyFound = false
  757.     totalFound = 0
  758.     return false
  759.   else
  760.     anyFound = true
  761.     totalFound = ubound (result) + 1
  762.     return true
  763.   end if
  764.   
  765. End Function
  766.  
  767. wordObject.findAll:
  768. Function findAll(entry as string) As boolean
  769.   dim loopCounter as integer
  770.   dim spaceSpot as integer
  771.   dim returnSpot as integer
  772.   dim tabSpot as integer
  773.   dim holdSpot as integer
  774.   dim tempString as string
  775.   dim tempString2 as string
  776.   dim holdingString as string
  777.   
  778.   tempString = entry
  779.   if tempString = "" then
  780.     totalFound = 0
  781.     anyFound = false
  782.     redim result (0)
  783.     result (0) = ""
  784.     return false
  785.   end if
  786.   
  787.   do
  788.     holdSpot = 0
  789.     spaceSpot = inStr (tempString, " ")
  790.     returnSpot = inStr (tempString, chr (13))
  791.     tabSpot = inStr (tempString, chr (9))
  792.     if spaceSpot = 0 and returnSpot = 0 and tabSpot = 0 then
  793.       if chew (tempString) <> "" then
  794.         result.append chew (tempString)
  795.         exit
  796.       else
  797.         exit
  798.       end if
  799.     end if
  800.     
  801.     if spaceSpot > 1 then
  802.       holdSpot = spaceSpot
  803.     end if
  804.     
  805.     if returnSpot < holdSpot and returnSpot > 1 then
  806.       holdSpot = returnSpot
  807.     end if
  808.     
  809.     if holdSpot = 0 and returnSpot >1 then
  810.       holdSpot = returnSpot
  811.     end if
  812.     
  813.     if tabSpot < holdSpot and tabSpot > 1 then
  814.       holdSpot = tabSpot
  815.     end if
  816.     
  817.     if holdSpot = 0 and tabSpot >1 then
  818.       holdSpot = tabSpot
  819.     end if
  820.     
  821.     if holdSpot = 0 then
  822.       loopCounter = loopCounter - 1
  823.       tempString = mid (tempString, 2)
  824.     else
  825.       if holdSpot = returnSpot then  // check for hyphen!
  826.          if mid (tempString, holdSpot - 1, 1) = "-"  and chomp (left (tempString, holdSpot)) <> "" then
  827.           tempString2 = getWord (mid (tempString, holdSpot), 1)
  828.           holdingString = nibble (left (tempString, holdSpot)) + chew (tempString2)
  829.           tempString = mid (tempString, (holdSpot + len (tempString2) + 2))
  830.         else
  831.           holdingString = chomp (left (tempString, holdSpot))
  832.           tempString = mid (tempString, holdSpot)
  833.         end if
  834.       else
  835.         holdingString =  chomp (left (tempString, holdSpot))
  836.         tempString = mid (tempString, (holdSpot + 1))
  837.       end if
  838.     end if
  839.     if hasNonSpace (chew (holdingString)) then
  840.       loopCounter = loopCounter + 1
  841.       if loopCounter = 1 then
  842.         result (0) = chew (holdingString)
  843.       else
  844.         result.append chew (holdingString)
  845.       end if
  846.     end if
  847.   loop
  848.   
  849.   if result (0) <> "" then
  850.     totalFound = ubound (result) + 1
  851.     anyFound = true
  852.     return true
  853.   else
  854.     return false
  855.   end if
  856. End Function
  857.  
  858. splitObject.split:
  859. Function split(entry as string, delimiter as string) As Boolean
  860.   
  861.   if inStr (entry, delimiter) = 0 then
  862.     left = ""
  863.     right = ""
  864.     return false
  865.   else
  866.     left = splitLeft (entry, delimiter)
  867.     right = splitRight (entry, delimiter)
  868.     return true
  869.   end if
  870. End Function
  871.  
  872. parseObject.parse:
  873. Function parse(entry as string, delimiter as string) As boolean
  874.   dim tempString as string
  875.   
  876.   if inStr (entry, delimiter) = 0 then
  877.     anyPresent = false
  878.     numberPresent = 0
  879.     redim result (0)
  880.     result (0) = ""
  881.     return false
  882.   end if
  883.   
  884.   result (0) = splitLeft (entry, delimiter)
  885.   tempString = splitRight (entry, delimiter)
  886.   
  887.   do
  888.     result.append splitLeft (tempString, delimiter)
  889.     if result (ubound (result)) = "" then
  890.       result (ubound (result)) = tempString
  891.       exit
  892.     end if
  893.     tempString = splitRight (tempString, delimiter)
  894.   loop
  895.   
  896.   anyPresent = true
  897.   numberPresent = ubound (result)
  898.   return true
  899. End Function
  900.  
  901.